<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>es6-proxy</title>
  </head>
  <body>
    <script>
      /* 数组去重&排序 */
      function unique(arr) {
        // 利用Set对象最快
        // Set 对象类似于数组，且成员的值都是唯一的
        const uniqueArr = [...new Set(arr)];

        return uniqueArr;
      }

      console.log(unique([1, 3, 2, 3, 1, 4, 5, 2, 4]));

      /* 数组排序 */
      var oldArr = [19, 55, 6, 52, 4, 6, 15, 28, 23, 2, 1, 9];
      // 方法一，数组的sort方法
      function bubbleSort1(arr) {
        return arr.sort((a, b) => b - a);
      }
      // 方法二，冒泡排序
      function bubbleSort2(arr) {
        for (let i = 0; i < arr.length; i++) {
          for (let j = 0; j < arr.length - i; j++) {
            // 如果前一个比后一个大,则交换位置
            if (arr[j] > arr[j + 1]) {
              let temp = arr[j];
              arr[j] = arr[j + 1];
              arr[j + 1] = temp;
            }
          }
        }
        return arr;
      }
      console.log(bubbleSort1(oldArr));
      console.log(bubbleSort2(oldArr));
      /* 实现一个对象深拷贝
       * 说明：输入一个对象，返回一个新对象
       * 示例：
       * const obj1 = {
       *    a: 1,
       *    b: [ 1, 2, { c: true }, [ 3 ] ],
       *    d: { e: 2, f: 3 },
       *    g: null,
       * }
       * const obj2 = deepClone(obj1); // 拷贝对象
       * obj1.b[1] = 9;                // 修改原对象
       * obj2.b[1];               // 输出 2
       */
      function deepClone(obj) {
        // write code here
        // const deepObj = JSON.parse(JSON.stringify(obj))
        let deepObj = null;
        if (typeof obj === "object" && obj != null) {
          deepObj = obj instanceof Array ? [] : {};
          for (let index in obj) {
            deepObj[index] = deepClone(obj[index]);
          }
        } else {
          deepObj = obj;
        }
        console.log(deepObj);
        return deepObj;
      }

      /*
       * 重排数组
       * 说明：给定一个长度为N的数组，N > 0，实现一个方法，将原数组头尾交替重排序，
       *   如：[a1, a2, a3, ..., aN-1, aN]重排成[a1, aN, a2, aN-1, a3, aN-2, ...]
       * 示例：
       *   resort([1, 2, 3, 4]);   // 输出 [1, 4, 2, 3]
       *   resort([1, 2, 3, 4, 5]);// 输出 [1, 5, 2, 4, 3]
       *   resort([1, 2]);         // 输出 [1, 2]
       *   resort(['a', 'b', 'x', 'e', 'g']); 输出 ['a', 'g', 'b', 'e', 'x']
       */
      function resort(arr) {
        // write code here
        let newArr = [];
        const arrLength = arr.length;
        arr.map((item, index) => {
          if (index < parseInt(arrLength / 2)) {
            newArr.push(item);
            newArr.push(arr[arrLength - index - 1]);
          }
        });
        if (arrLength % 2 === 1) {
          newArr.push(arr[parseInt(arrLength / 2)]);
        }
        return newArr;
      }

      console.log(resort([1, 2, 3, 4, 5])); // 输出 [1, 5, 2, 4, 3])
      console.log(resort(["a", "b", "x", "e", "g"])); // 输出 ['a', 'g', 'b', 'e', 'x'])
    </script>
  </body>
</html>
